package main

import (
	"fmt"
	"io"
	"sort"
)
/*
题目： 小Q今天在上厕所时想到了这个问题：有n个数，两两组成二元组，相差最小的有多少对呢？相差最大呢？


输入描述:
 输入包含多组测试数据。
 对于每组测试数据：
 N - 本组测试数据有n个数
 a1,a2...an - 需要计算的数据
 保证:
 1<=N<=100000,0<=ai<=INT_MAX.

输出描述:
对于每组数据，输出两个数，第一个数表示差最小的对数，第二个数表示差最大的对数。

输入例子1:
6
45 12 45 32 5 6
输出例子1:
1 2
 */

func main() {
	/*
	import (
	    "fmt"
	    "io"
	)

	func main() {
	    var a, b int
	    for {
	        _, err := fmt.Scan(&a, &b)
	        if err == io.EOF {
	            break
	        }
	        fmt.Println(a + b)
	    }
	}
	 */
	/*
	6
	45 12 45 32 5 6
	 */
	var N int
	for {
		_, err := fmt.Scan(&N)
		if err == io.EOF {
			break
		}
		arr := make([]int, N)
		for i := range arr {
			fmt.Scan(&arr[i])
		}
		// 排序
		sort.Ints(arr)
		// fmt.Println(arr)
		// 字典统计个数
		tempMap := make(map[int]int)
		for _, v := range arr {
			if _, ok := tempMap[v]; ok {
				tempMap[v] += 1
			}else  {
				tempMap[v] = 1
			}
		}
		minRes := 0
		for k, v := range tempMap {
			if tempMap[k] >= 2 {
				minRes += (v * (v - 1)) / 2
			}
		}
		// fmt.Println(tempMap)



		// 找到最大的数 并记录最大的数的个数
		maxNum := arr[N - 1]
		maxNumCount := 1
		for i := N - 2; i >= 0; i -- {
			if arr[i] == maxNum {
				maxNumCount += 1
			}else {  // 找到不相等就跳出循环
				break
			}
		}
		// 找到最小的数 并记录最小的数的个数
		minNum := arr[0]
		minNumCount := 1
		for i := 1; i < N; i ++ {
			if arr[i] == minNum {
				minNumCount += 1

			}else {
				break
			}
		}
		maxRes := maxNumCount * minNumCount
		fmt.Println(minRes, maxRes)
	}

}
